
# coding=utf-8
from langchain_core.output_parsers import StrOutputParser
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.prompts import ChatPromptTemplate
from prompts.C13_prompt import prompt_bubble_score
from utils.generate_token import api_key
from collections import OrderedDict
from pprint import pprint

# 全局评分
class Global_Score:

    def __init__(self):
        self.llm = ChatZhipuAI(
            api_key=api_key,
            model_name="glm-4-plus",
            streaming=True,
            temperature=0.01,
            top_p=0.01,
        )

    async def bubble_score(self, content_text: str, material_list: list):
        '''
        :param content_text: 招股书文本
        :param material_list: 材料信息列表
        :return:
        '''

        try:
            query_message = prompt_bubble_score(content_text, material_list)

            # print(1111111111111111111111111111111111111111)
            # print(query_message)

            chat_prompt = ChatPromptTemplate.from_messages(
                [("system", "你是一个证券交易所中审核上市文件的专家。"),
                 ("human", "{query_message}")]
            )
            chain = chat_prompt | self.llm | StrOutputParser()
            score_text = ''
            while not score_text.isdigit():
                score_text = chain.invoke({"query_message": query_message})
                print('score_text', score_text)
            return int(score_text)
            # async for token in chain.astream({"query_message": query_message}):
            #     # print(token, end='', flush=True)
            #     yield token

        except Exception as e:
            # print(f"C13 error : {e}")
            return f"C13 error : {e}"



if __name__ == '__main__':
    import asyncio
    Global = Global_Score()

    from chains.C2_recall_material import recall_material_list
    content_text = """(1)惠州市四季绿农产品有限公司于 2021年未按照回款计划回款，公司多次催缴无果，预计无法收回，对该客户截至 2021年6月 30 日的应收账款 365.75 万元单项全额计提坏账:"""
    sector = '创业板'
    industry = '软件和信息技术服务业'
    region = None
    problem_type_list = []
    material_list = asyncio.run(recall_material_list(content_text, 8, sector, industry, region, problem_type_list))
    # print('material_list:')
    # print(material_list)
    print(*material_list, sep='\n')

    asyncio.run(Global.bubble_score(content_text, material_list))

    # 请发行人说明：(1) 与齐齐哈尔博实畜牧服务有限公司签署的《支持和牛养殖协议》的具体内容，包括但不限于协议的主要条款、资金支持的额度、使用条件及期限；(2) 抵押担保的具体情况，包括抵押物的评估价值、抵押权的设立程序及其合法性；(3) 连带责任保证的具体保证范围、保证期间以及保证人的资信状况和保证能力。

    # 第三方核查：请保荐机构、发行人律师核查上述事项，包括协议的法律效力、资金使用的合规性、抵押担保和连带责任保证的法律风险，并发表明确核查意见。
